1
תגובות

..באג?

פתח ldbrgr ,
כשאני קורה ל get_called_class בתוך closure אני מקבל את ה parent class ולא את הקלאס עצמה,
אבל שאני קורה ל get_called_class מחוץ ל closure ומעביר אותו ב use אני מקבל את הקלאס עצמה
phplive, pastie
זה באג?

1 תשובות

avatar ענה iiddaannyy ב 18 לפברואר 2013 #

זה מאוד פשוט:
get_called_class מחזירה לך את המחלקה הכי תחתית (כשההורה הכי למעלה והילדים למטה).
כשהגדרת אותה מחוץ ל-closure לא הייתה בעיה Lama הכי למטה בהירארכיה.

אבל כשקראת ל-get_called_class ב-closure מה שקרה הוא ככה:
1. יצירת closure והחזרתו.
2. ה-closure נכנס למשתנה $bild2.
3. Lama::bild2 סיימה לרוץ.
4. מפעילים את הפונקציה שיש ב-$bild2.
5. ה-closure (אם אתה יודע את אופן הפעולה של closure אתה יודע שהיא שומרת את ה-context שבו היא הוגדרה) לא זוכר את המחלקות היורשות של Mama.
6. get_called_class בודקת את המחלקה הכי תחתית בהירארכיה ורק כי ה-closure לא זוכר את המחלקות היורשות אז זה נחשב כאילו אין יורשות ל-Mama וזה מה שמוחזר.


זה לא באג, זו ההתנהגות של closure.

אני אבדוק את זה יותר לעומק בצהריים, כי לא היה לי ממש זמן לבדוק לעומק את מה שקורה.